<?php

namespace app\controllers;

use Yii;
use yii\helpers\Url;
use app\Models\User;
use app\models\Region;
use app\models\Weather;
use yii\web\Response;
use yii\filters\VerbFilter;

class RegionController extends \yii\web\Controller
{

  /**
     * @inheritDoc
     */
    public function behaviors()
    {
        return array_merge(
            parent::behaviors(),
            [
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'delete' => ['POST'],
                    ],
                ],
            ]
        );
    }

  public function actionView($regionId) {
    $response = Yii::$app->response;
    if (Yii::$app->user->isGuest) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 401;
      return ['message' => 'Неверные авторизационные данные'];
    } 

    // Проверяем корректность accountId
    if ($regionId === null || !ctype_digit($regionId) || $regionId <= 0) {
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->statusCode = 400;
        return ['message' => 'regionId должен быть целым положительным числом'];
    }


    $model =  Region::findOne(['id' => $regionId]);   

    if ($model === null) {
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->statusCode = 404;
        return ['message' => 'Регион с regionld не найден'];
    }
  
    return $this->render('view', [
      'model' => $model,
    ]);
  }

  public function actionCreate() {
    $response = Yii::$app->response;
    if (Yii::$app->user->isGuest) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 401;
      return ['message' => 'Неверные авторизационные данные'];
    }

    $model = new Region();

    if ($this->request->isPost) {
        if ($model->load($this->request->post()) && $model->save()) {
            return $this->redirect(['view', 'regionId' => $model->id]);
        }
    } else {
        $model->loadDefaultValues();
    }

    return $this->render('create', [
        'model' => $model,
    ]);
  }

  public function actionUpdate($regionId) {
    $response = Yii::$app->response;
    if (Yii::$app->user->isGuest) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 401;
      return ['message' => 'Неверные авторизационные данные'];
    } 

    // Проверяем корректность accountId
    if ($regionId === null || !ctype_digit($regionId) || $regionId <= 0) {
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->statusCode = 400;
        return ['message' => 'regionId должен быть целым положительным числом'];
    }


    $model =  Region::findOne(['id' => $regionId]);   

    if ($model === null) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 404;
      return ['message' => 'Регион с regionld не найден'];
    }

    if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    }

    return $this->render('update', [
        'model' => $model,
    ]);
  }

  public function actionDelete($regionId) {
    $response = Yii::$app->response;
    if (Yii::$app->user->isGuest) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 401;
      return ['message' => 'Неверные авторизационные данные'];
    } 

    // Проверяем корректность accountId
    if ($regionId === null || !ctype_digit($regionId) || $regionId <= 0) {
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->statusCode = 400;
        return ['message' => 'regionId должен быть целым положительным числом'];
    }
    
    $model =  Region::findOne(['id' => $regionId]);   

    if ($model === null) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 404;
      return ['message' => 'Регион с regionld не найден'];
    }


    $model->delete();

    return $this->redirect(['/']);
  }

  public function actionCreateWeather($regionId, $weatherId) {
      $response = Yii::$app->response;
      if (Yii::$app->user->isGuest) {
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->statusCode = 401;
        return ['message' => 'Неверные авторизационные данные'];
      }
  
      $model = new Weather();
  
      if ($this->request->isPost) {
          if ($model->load($this->request->post())) {

            $model->regionId = $regionId;
             if ($model->save()) {
               return $this->redirect(['view', 'id' => $model->id]);
             } else {
              $response->format = \yii\web\Response::FORMAT_JSON;
              $response->statusCode = 400;
              return ['message' => 'Не удалось создать погоду для конкретного региона'];
             }
          }
      } else {
          $model->loadDefaultValues();
      }
  
      return $this->render('create', [
          'model' => $model,
      ]);
  }

  public function actionDeleteWeather($regionId, $weatherId) {

    $response = Yii::$app->response;
    if (Yii::$app->user->isGuest) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 401;
      return ['message' => 'Неверные авторизационные данные'];
    } 

    // Проверяем корректность accountId
    if ($regionId === null || !ctype_digit($regionId) || $regionId <= 0 || $weatherId === null || !ctype_digit($weatherId) || $weatherId <= 0) {
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->statusCode = 400;
        return ['message' => 'regionId и weatherId должен быть целыми положительными числами'];
    }
    
    $model =  Weather::findOne(['id' => $weatherId, 'regionId' => $regionId]);   

    if ($model === null) {
      $response->format = \yii\web\Response::FORMAT_JSON;
      $response->statusCode = 404;
      return ['message' => 'Погогда с таким regionId и weatherId не найдена'];
    }


    $model->delete();

    return $this->redirect(['/']);

  }
}